package com.wentao.thisFacade.business;

import com.wentao.thisCommon.model.RequestBase;
import com.wentao.thisCommon.model.ResultBase;
import com.wentao.thisFacade.common.UserInfo;
import com.wentao.thisFacade.domain.reqeust.*;
import com.wentao.thisFacade.domain.result.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@RequestMapping(value = "/app")
public interface AppCtrInterface {

    @PostMapping("/test1")
    ResultBase<List<LocationProvinceResult>> test1();
    @PostMapping("/test2")
    ResultBase<List<UserInfo>> test2();
    /**
     * 版本检查
     *
     * @param entity 用户版本信息
     * @return 版本检查结果
     */
    @PostMapping("/CheckVersion")
    ResultBase<VersionCheckResult> checkVersion(@RequestBody RequestBase<VersionCheckRequest> entity);

    /**
     * 酒店注册
     *
     * @param entity 酒店注册信息封装
     * @return 注册结果返回
     */
    @PostMapping("/HotelRegister")
    ResultBase<PhoneBackUtilsResult> hotelRegister(@RequestBody RequestBase<HotelRegisterRequest> entity);

    /**
     * 酒店信息录入
     *
     * @param entity 酒店信息封装
     * @return 执行结果
     */
    @PostMapping("/AddCompanyCustom")
    ResultBase<Boolean> addCompanyCustom(@RequestBody RequestBase<AddCompanyCustom> entity);

    /**
     * 酒店资质录入
     *
     * @param entity 酒店资质封装
     * @return 资质录入结果返回
     */
    @PostMapping("/OperatorInformationEntry")
    ResultBase<PhoneBackUtilsResult> operatorInformationEntry(@RequestBody RequestBase<OperatorListRequest> entity);

    /**
     * 签订协议
     *
     * @param entity 酒店code封装
     * @return 执行结果
     */
    @PostMapping("/SignContract")
    ResultBase<SignContractResult> signContract(@RequestBody RequestBase<SignContractRequest> entity);

    /**
     * 根据companyCode查询酒店审核状态（用于前端页面跳转），用CompanyAddressInfoResult.remark属性来表示状态
     *
     * @param entity 查询条件封装
     * @return 返回remark属性表示状态，如果是审核驳回状态用CompanyAddressInfoResult.reason属性来表示驳回原因
     */
    @PostMapping("/HotelReviewStatus")
    ResultBase<CompanyAddressInfoResult> hotelReviewStatus(@RequestBody RequestBase<HotelDetailsRequest> entity);

    /**
     * 根据companyCode查询酒店信息
     *
     * @param entity 查询条件封装
     * @return 返回remark属性表示状态，如果是审核驳回状态用CompanyAddressInfoResult.reason属性来表示驳回原因
     */
    @PostMapping("/HotelDetails")
    ResultBase<CompanyCustomResult> hotelDetails(@RequestBody RequestBase<HotelDetailsRequest> entity);

    /**
     * 商品列表
     *
     * @param entity 查所有商品无过滤条件
     * @return 商品列表
     */
    @SuppressWarnings("rawtypes")
    @PostMapping("/GoodsList")
    ResultBase<List<GoodsInfoResult>> goodsList(@RequestBody RequestBase entity);

    /**
     * 根据商品id查询商品详情
     *
     * @param entity 商品id封装
     * @return 商品详情
     */
    @PostMapping("/GoodsPropertyInfo")
    ResultBase<GoodsInfoResult> goodsPropertyInfo(@RequestBody RequestBase<GoodsPropertyInfoRequest> entity);

    /**
     * 提交订单
     *
     * @param entity 订单封装
     * @return 订单信息
     */
    @PostMapping("/CreateOrderInfo")
    ResultBase<OrderInfoResult> createOrderInfo(@RequestBody RequestBase<CreateOrderInfoListRequest> entity);

    /**
     * 订单列表
     *
     * @param entity 根据userId查询该用户酒店的订单列表
     * @return 订单列表
     */
    @SuppressWarnings("rawtypes")
    @PostMapping("/OrderList")
    ResultBase<List<OrderInfoResult>> orderList(@RequestBody RequestBase entity);

    /**
     * 根据订单id查询订单详情
     *
     * @param entity 订单id封装
     * @return 订单详情
     */
    @PostMapping("/OrderInfo")
    ResultBase<OrderInfoResult> orderInfo(@RequestBody RequestBase<SearchOrderInfoRequest> entity);

    /**
     * 订单确认收货
     *
     * @param entity 订单id
     * @return 订单详情
     */
    @PostMapping("/OrderConfirmReceived")
    ResultBase<OrderInfoResult> orderConfirmReceived(@RequestBody RequestBase<OrderPayRequest> entity);

    /**
     * 订单和支付状态改变接口（主用于测试）
     *
     * @param entity 订单id，订单状态，支付状态
     * @return 订单详情
     */
    @PostMapping("/ChangeOrderPayStatus")
    ResultBase<OrderInfoResult> changeOrderPayStatus(@RequestBody RequestBase<OrderPayRequest> entity);

    /**
     * 获取数据库配置的基本信息
     *
     * @param entity 查询条件封装
     * @return 数据库配置
     */
    @PostMapping("/SearchSettingList")
    ResultBase<List<SettingMapResult>> searchSettingList(@RequestBody RequestBase<SearchSettingListRequest> entity);

}

